์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ๋ฅผ ํ์ํ๋ ์ข ํฉ ๊ฐ์ด๋๋ก, ํจํค์ง ๋ฐ๊ฒฌ, ์์กด์ฑ ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ: ํจํค์ง ๋ฐ๊ฒฌ๊ณผ ๊ด๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ํ๊ณ๋ ๋ฐฉ๋ํ๊ณ ํ๊ธฐ์ฐจ๋ฉฐ, ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ์ ๋ํ ํ๋ถํ ์ฌ์ ๊ตฌ์ถ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ๋ฐ๊ฒฌ, ๊ด๋ฆฌ ๋ฐ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ์์น๋ ํ๋ก์ ํธ ๊ท๋ชจ์ ๊ด๊ณ์์ด ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ํจํค์ง ๋ฐ๊ฒฌ ๊ธฐ์ , ์ธ๊ธฐ ์๋ ํจํค์ง ๋งค๋์ , ๊ฑด๊ฐํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฒ ์ด์ค ์ ์ง๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๋ฉฐ, ์ ๋ฐ์ ์ธ ํ๊ฒฝ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ดํดํ๊ธฐ
ํจํค์ง ๊ด๋ฆฌ์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ๋๋ ๋ค์ํ ๋ชจ๋ ํ์์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- CommonJS (CJS): ์ญ์ฌ์ ์ผ๋ก Node.js์์ ์ฌ์ฉ๋์์ผ๋ฉฐ, `require`์ `module.exports`๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Asynchronous Module Definition (AMD): ๋ธ๋ผ์ฐ์ ์์ ๋น๋๊ธฐ ๋ก๋ฉ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, `define`์ ์ฌ์ฉํฉ๋๋ค.
- Universal Module Definition (UMD): CJS์ AMD ๋ชจ๋์ ํธํ๋๋๋ก ์๋ํฉ๋๋ค.
- ECMAScript Modules (ESM): ํ๋์ ์ธ ํ์ค์ผ๋ก, `import`์ `export`๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ Node.js ๋ชจ๋์์ ์ ์ ๋ ๋ง์ด ์ง์๋๊ณ ์์ต๋๋ค.
ESM์ ์ ์ ๋ถ์, ํธ๋ฆฌ ์์ดํน(tree shaking), ํฅ์๋ ์ฑ๋ฅ๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํ์ฌ ์๋ก์ด ํ๋ก์ ํธ์ ๊ถ์ฅ๋๋ ํ์์ ๋๋ค. CJS์ ๊ฐ์ ์ค๋๋ ํ์์ ํนํ ๋ ๊ฑฐ์ ์ฝ๋๋ฒ ์ด์ค์ Node.js ํ๋ก์ ํธ์์ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋์ง๋ง, ํธํ์ฑ๊ณผ ์ํธ ์ด์ฉ์ฑ์ ์ํด ๊ทธ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
ํจํค์ง ๋ฐ๊ฒฌ: ์ฌ๋ฐ๋ฅธ ๋ชจ๋ ์ฐพ๊ธฐ
๋ชจ๋ ์ํ๊ณ๋ฅผ ํ์ฉํ๋ ์ฒซ ๋จ๊ณ๋ ์์ ์ ์ ํฉํ ํจํค์ง๋ฅผ ์ฐพ๋ ๊ฒ์ ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ๋ต์ ๋๋ค:
1. npm (Node Package Manager) ์น์ฌ์ดํธ
npm ์น์ฌ์ดํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง๋ฅผ ์ํ ์ค์ ์ ์ฅ์์ ๋๋ค. ํค์๋, ์์กด์ฑ, ์ธ๊ธฐ๋ ๋ฑ ๋ค์ํ ํํฐ๋ฅผ ๊ฐ์ถ ๊ฐ๋ ฅํ ๊ฒ์ ์์ง์ ์ ๊ณตํฉ๋๋ค. ๊ฐ ํจํค์ง ํ์ด์ง๋ ๋ค์์ ํฌํจํ ์์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค:
- ์ค๋ช : ํจํค์ง์ ๋ชฉ์ ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์.
- ๋ฒ์ ๊ธฐ๋ก: ๋ฆด๋ฆฌ์ค ๋ ธํธ์ ํจ๊ป ๋ชจ๋ ์ถ์๋ ๋ฒ์ ์ ๋ก๊ทธ.
- ์์กด์ฑ: ์ด ํจํค์ง๊ฐ ์์กดํ๋ ๋ค๋ฅธ ํจํค์ง ๋ชฉ๋ก.
- ๋ฆฌํฌ์งํ ๋ฆฌ: ํจํค์ง์ ์์ค ์ฝ๋ ๋ฆฌํฌ์งํ ๋ฆฌ(์ผ๋ฐ์ ์ผ๋ก GitHub) ๋งํฌ.
- ๋ฌธ์: ํจํค์ง์ ๋ฌธ์ ๋งํฌ, ์ข ์ข GitHub Pages๋ ์ ์ฉ ์น์ฌ์ดํธ์์ ํธ์คํ ๋ฉ๋๋ค.
- ๋ค์ด๋ก๋ ์: ํจํค์ง๊ฐ ๋ค์ด๋ก๋๋ ํ์์ ๋ํ ํต๊ณ.
์์: npm์์ "date formatting"์ ๊ฒ์ํ๋ฉด `date-fns`, `moment`, `luxon`๊ณผ ๊ฐ์ ์ธ๊ธฐ ์๋ ์ต์ ์ ํฌํจํ ๋ค์ํ ํจํค์ง๊ฐ ๋์ต๋๋ค.
2. GitHub ๊ฒ์
GitHub๋ ํนํ ํน์ ๊ธฐ๋ฅ์ด๋ ๊ตฌํ์ ๊ฒ์ํ ๋ ํจํค์ง๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ฐ ์ ์ฉํ ๋ฆฌ์์ค์ ๋๋ค. ์ํ๋ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ํค์๋๋ฅผ "JavaScript library" ๋๋ "npm package"์ ๊ฐ์ ์ฉ์ด์ ํจ๊ป ์ฌ์ฉํ์ธ์.
์์: GitHub์์ "image optimization javascript library"๋ฅผ ๊ฒ์ํ๋ฉด ํ๋ฐํ๊ฒ ์ ์ง ๊ด๋ฆฌ๋๊ณ ๋ฌธ์ํ๊ฐ ์ ๋ ํ๋ก์ ํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
3. Awesome ๋ฆฌ์คํธ
"Awesome ๋ฆฌ์คํธ"๋ ํน์ ์ฃผ์ ์ ๋ํ ์์ ๋ ๋ฆฌ์์ค ๋ชจ์์ ๋๋ค. ์ข ์ข ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฅ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋๊ตฌ ๋ชฉ๋ก์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ๋ฆฌ์คํธ๋ ์จ๊ฒจ์ง ๋ณด์์ ๋ฐ๊ฒฌํ๊ณ ๋ค์ํ ์ต์ ์ ํ์ํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
์์: GitHub์์ "awesome javascript"๋ฅผ ๊ฒ์ํ๋ฉด "awesome-javascript"์ ๊ฐ์ ์ฌ๋ฌ ์ธ๊ธฐ ์๋ Awesome ๋ฆฌ์คํธ๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ ์๋ฃ ๊ตฌ์กฐ, ๋ ์ง ์กฐ์, DOM ์กฐ์ ๋ฑ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
4. ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ ๋ฐ ํฌ๋ผ
Stack Overflow, Reddit (r/javascript), ์ ๋ฌธ ํฌ๋ผ๊ณผ ๊ฐ์ ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ๋ ๊ฒ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ ํจํค์ง์ ๋ํ ์ถ์ฒ์ ๋ฐ๊ณ ๋ฐฐ์ฐ๋ ๊ท์คํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ง๋ฌธ์ ํ๊ณ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ํ ๋งฅ๋ฝ์ ์ ๊ณตํ์ฌ ๊ด๋ จ์ฑ ์๋ ์ ์์ ๋ฐ์ผ์ธ์.
์์: Stack Overflow์ "๊ตญ์ ์ ํ๋ฒํธ ํ์ ์ง์ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฐ์ฅ ์ข์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ์?"์ ๊ฐ์ ์ง๋ฌธ์ ๊ฒ์ํ๋ฉด `libphonenumber-js` ํจํค์ง๋ฅผ ์ถ์ฒ๋ฐ์ ์ ์์ต๋๋ค.
5. ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ ๋ฐ ๊ธฐ์ฌ
๋ง์ ๊ฐ๋ฐ์๊ฐ ๋ค์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฆฌ๋ทฐํ๊ณ ๋น๊ตํ๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ๊ณผ ๊ธฐ์ฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํ๋ฉด ๋ค์ํ ์ต์ ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ต๋๋ค.
์์: ๊ตฌ๊ธ์์ "javascript charting library comparison"์ ๊ฒ์ํ๋ฉด Chart.js, D3.js, Plotly์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๊ตํ๋ ๊ธฐ์ฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ฌ๋ฐ๋ฅธ ํจํค์ง ์ ํํ๊ธฐ: ํ๊ฐ ๊ธฐ์ค
๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ํจํค์ง๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด, ํ๋ก์ ํธ์ ํตํฉํ๊ธฐ ์ ์ ์ ์คํ๊ฒ ํ๊ฐํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์ ๊ธฐ์ค์ ๊ณ ๋ คํ์ธ์:
- ๊ธฐ๋ฅ: ํจํค์ง๊ฐ ํน์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๊น? ํ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๊น?
- ๋ฌธ์: ํจํค์ง ๋ฌธ์๊ฐ ์ ์์ฑ๋์ด ์์ต๋๊น? ์ฌ์ฉ๋ฒ์ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๊น?
- ์ธ๊ธฐ๋ ๋ฐ ๋ค์ด๋ก๋ ์: ๋์ ๋ค์ด๋ก๋ ์์ ํ์ฑ ์ฌ์ฉ์๋ ํจํค์ง๊ฐ ์ ์ ์ง ๊ด๋ฆฌ๋๊ณ ์ ๋ขฐํ ์ ์์์ ๋ํ๋ผ ์ ์์ต๋๋ค.
- ์ ์ง ๊ด๋ฆฌ: ํจํค์ง๊ฐ ํ๋ฐํ๊ฒ ์ ์ง ๊ด๋ฆฌ๋๊ณ ์์ต๋๊น? ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ต๊ทผ ์ปค๋ฐ์ด ์์ต๋๊น? ์ด์๊ฐ ์ ์ํ๊ฒ ์ฒ๋ฆฌ๋๊ณ ์์ต๋๊น?
- ๋ผ์ด์ ์ค: ํจํค์ง๊ฐ ํ์ฉ์ ์ธ ์คํ ์์ค ๋ผ์ด์ ์ค(์: MIT, Apache 2.0) ํ์ ์์ต๋๊น? ๋ผ์ด์ ์ค๊ฐ ํ๋ก์ ํธ์ ๋ผ์ด์ ์ค ์๊ตฌ ์ฌํญ๊ณผ ํธํ๋๋์ง ํ์ธํ์ธ์.
- ์์กด์ฑ: ํจํค์ง์ ๋ง์ ์์กด์ฑ์ด ์์ต๋๊น? ๊ณผ๋ํ ์์กด์ฑ์ ํ๋ก์ ํธ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ณด์ ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ: ํจํค์ง์ ๋ฒ๋ค ํฌ๊ธฐ๋ ์ผ๋ง๋ ํฝ๋๊น? ํฐ ๋ฒ๋ค ํฌ๊ธฐ๋ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. Bundlephobia์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋ถ์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ณด์: ํจํค์ง์ ๊ด๋ จ๋ ์๋ ค์ง ๋ณด์ ์ทจ์ฝ์ ์ด ์์ต๋๊น? `npm audit` ๋๋ `yarn audit`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ทจ์ฝ์ ์ ํ์ธํ์ธ์.
- ์ฑ๋ฅ: ํจํค์ง์ ์ฑ๋ฅ์ ์ด๋ป์ต๋๊น? ๋ค์ํ ํจํค์ง์ ์ฑ๋ฅ์ ๋น๊ตํ๊ธฐ ์ํด ๋ฒค์น๋งํน์ ๊ณ ๋ คํ์ธ์.
์ค์ฉ์ ์ธ ์์: React ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตญ์ ํ(i18n)๋ฅผ ์ฒ๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. `i18next`์ `react-intl` ๋ ๊ฐ์ง ์ต์ ์ ์ฐพ์์ต๋๋ค. `i18next`๋ ๋ ์ธ๊ธฐ๊ฐ ๋ง๊ณ ๊ด๋ฒ์ํ ๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, `react-intl`์ React๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋์์ผ๋ฉฐ ๋ ๊ธด๋ฐํ ํตํฉ์ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ์ฝ๋ฉ ์คํ์ผ ์ ํธ๋์ ๋ฐ๋ผ ๋ ํจํค์ง๋ฅผ ๋ชจ๋ ํ๊ฐํ ํ, React ์ํ๊ณ ๋ด์์์ ์ฌ์ฉ ํธ์์ฑ๊ณผ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ `react-intl`์ ์ ํํฉ๋๋ค.
ํจํค์ง ๋งค๋์ : npm, Yarn, pnpm
ํจํค์ง ๋งค๋์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ์์กด์ฑ์ ์ค์น, ์ ๋ฐ์ดํธ ๋ฐ ๊ด๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํจํค์ง ๋งค๋์ ๋ npm, Yarn, pnpm์ ๋๋ค. ์ด๋ค ๋ชจ๋ `package.json` ํ์ผ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ ์ํฉ๋๋ค.
1. npm (Node Package Manager)
npm์ Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๋งค๋์ ์ด๋ฉฐ Node.js์ ํจ๊ป ์๋์ผ๋ก ์ค์น๋ฉ๋๋ค. npm ๋ ์ง์คํธ๋ฆฌ์์ ํจํค์ง๋ฅผ ์ค์น, ์ ๋ฐ์ดํธ, ์ ๊ฑฐํ ์ ์๋ ๋ช ๋ น์ค ๋๊ตฌ์ ๋๋ค.
์ฃผ์ npm ๋ช ๋ น์ด:
npm install: ํน์ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.npm install: `package.json` ํ์ผ์ ๋์ด๋ ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.npm update: ํน์ ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.npm uninstall: ํน์ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.npm audit: ํ๋ก์ ํธ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์บํฉ๋๋ค.npm start: `package.json` ํ์ผ์ `start` ํ๋์ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
์์: npm์ ์ฌ์ฉํ์ฌ `lodash` ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์:
npm install lodash
2. Yarn
Yarn์ npm์ ์ฑ๋ฅ๊ณผ ๋ณด์์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ํจํค์ง ๋งค๋์ ์ ๋๋ค. lock ํ์ผ(`yarn.lock`)์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์์กด์ฑ์ด ์ผ๊ด๋๊ฒ ์ค์น๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ฃผ์ Yarn ๋ช ๋ น์ด:
yarn add: ํน์ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.yarn install: `package.json` ํ์ผ์ ๋์ด๋ ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.yarn upgrade: ํน์ ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.yarn remove: ํน์ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.yarn audit: ํ๋ก์ ํธ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์บํฉ๋๋ค.yarn start: `package.json` ํ์ผ์ `start` ํ๋์ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
์์: Yarn์ ์ฌ์ฉํ์ฌ `lodash` ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์:
yarn add lodash
3. pnpm
pnpm(performant npm)์ ๋์คํฌ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ ์ค์น ์๋๋ฅผ ํฅ์์ํค๋ ๋ฐ ์ค์ ์ ๋ ํจํค์ง ๋งค๋์ ์ ๋๋ค. ์ฝํ ์ธ ์ฃผ์ ์ง์ ํ์ผ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋๋ผ๋ ํจํค์ง๋ฅผ ํ ๋ฒ๋ง ์ ์ฅํฉ๋๋ค.
์ฃผ์ pnpm ๋ช ๋ น์ด:
pnpm add: ํน์ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.pnpm install: `package.json` ํ์ผ์ ๋์ด๋ ๋ชจ๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค.pnpm update: ํน์ ํจํค์ง๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.pnpm remove: ํน์ ํจํค์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.pnpm audit: ํ๋ก์ ํธ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์บํฉ๋๋ค.pnpm start: `package.json` ํ์ผ์ `start` ํ๋์ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
์์: pnpm์ ์ฌ์ฉํ์ฌ `lodash` ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์:
pnpm add lodash
ํจํค์ง ๋งค๋์ ์ ํํ๊ธฐ
ํจํค์ง ๋งค๋์ ์ ์ ํ์ ์ข ์ข ๊ฐ์ธ์ ์ธ ์ ํธ๋์ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. npm์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ ๊ฐ์ฅ ํฐ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ฉด, Yarn์ ํฅ์๋ ์ฑ๋ฅ๊ณผ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. pnpm์ ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ๊ณผ ์ค์น ์๋ ํฅ์์ ๋ฐ์ด๋๋ฉฐ, ์ด๋ ์์กด์ฑ์ด ๋ง์ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
์์กด์ฑ ๊ด๋ฆฌํ๊ธฐ
ํจ๊ณผ์ ์ธ ์์กด์ฑ ๊ด๋ฆฌ๋ ๊ฑด๊ฐํ๊ณ ์์ ์ ์ธ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
1. ์ ์์ ๋ฒ์ (Semantic Versioning, SemVer)
์ ์์ ๋ฒ์ (SemVer)์ ๊ฐ ๋ฒ์ ๋ฒํธ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๋ฒ์ ๊ด๋ฆฌ ์ฒด๊ณ์ ๋๋ค. SemVer ๋ฒ์ ๋ฒํธ๋ MAJOR.MINOR.PATCH์ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- MAJOR: ํธํ๋์ง ์๋ API ๋ณ๊ฒฝ์ด ์์์ ๋ํ๋ ๋๋ค.
- MINOR: ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์์ ๋ํ๋ ๋๋ค.
- PATCH: ํ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ๋ฒ๊ทธ๊ฐ ์์ ๋์์์ ๋ํ๋ ๋๋ค.
`package.json` ํ์ผ์์ ์์กด์ฑ์ ์ง์ ํ ๋, SemVer ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฉ๋๋ ํจํค์ง ๋ฒ์ ์ ์ ์ดํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ SemVer ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
^<version>: ์ฃผ ๋ฒ์ (major)์ด ๋ณ๊ฒฝ๋์ง ์๋ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค (์:^1.2.3์1.3.0์ผ๋ก์ ์ ๋ฐ์ดํธ๋ ํ์ฉํ์ง๋ง2.0.0์ผ๋ก๋ ํ์ฉํ์ง ์์).~<version>: ํจ์น ๋ฒ์ (patch)๋ง ์ฆ๊ฐํ๋ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํฉ๋๋ค (์:~1.2.3์1.2.4๋ก์ ์ ๋ฐ์ดํธ๋ ํ์ฉํ์ง๋ง1.3.0์ผ๋ก๋ ํ์ฉํ์ง ์์).<version>: ์ ํํ ๋ฒ์ ์ ์ง์ ํฉ๋๋ค (์:1.2.3).*: ๋ชจ๋ ๋ฒ์ ์ ํ์ฉํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
SemVer ๋ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด ํธํ์ฑ์ ๊นจ๋ ๋ณ๊ฒฝ์ ํผํ๋ฉด์ ๋ฒ๊ทธ ์์ ๊ณผ ๋ถ ๋ฒ์ (minor) ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ๋ฐ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ ํ์๋ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
2. Lock ํ์ผ
Lock ํ์ผ(์: npm์ `package-lock.json`, Yarn์ `yarn.lock`, pnpm์ `pnpm-lock.yaml`)์ ํ๋ก์ ํธ์ ์ค์น๋ ๋ชจ๋ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๊ฒฝ์ ๊ด๊ณ์์ด ํ๋ก์ ํธ์์ ์์ ํ๋ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๋ฒ์ ์ ์์กด์ฑ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค. Lock ํ์ผ์ ์ผ๊ด๋ ๋น๋๋ฅผ ๋ณด์ฅํ๊ณ ์๊ธฐ์น ์์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
๋ชจ๋ ํ์๊ณผ ๊ณต์ ๋ ์ ์๋๋ก ํญ์ lock ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (์: Git)์ ์ปค๋ฐํ์ธ์.
3. ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ ์ ๋ฐ์ดํธํ๊ธฐ
์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ๋ณด์, ์ฑ๋ฅ ๋ฐ ์์ ์ฑ์ ์ํด ์ค์ํฉ๋๋ค. ์ ๊ธฐ์ ์ผ๋ก `npm update`, `yarn upgrade` ๋๋ `pnpm update`๋ฅผ ์คํํ์ฌ ์์กด์ฑ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์. ๊ทธ๋ฌ๋ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ ํ์๋ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํด์ผ ํฉ๋๋ค.
4. ์ฌ์ฉํ์ง ์๋ ์์กด์ฑ ์ ๊ฑฐํ๊ธฐ
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ๋ก์ ํธ์ ์ฌ์ฉ๋์ง ์๋ ์์กด์ฑ์ด ์ถ์ ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์กด์ฑ์ ํ๋ก์ ํธ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ณด์ ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์์ต๋๋ค. `depcheck`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ๋์ง ์๋ ์์กด์ฑ์ ์๋ณํ๊ณ `package.json` ํ์ผ์์ ์ ๊ฑฐํ์ธ์.
5. ์์กด์ฑ ๊ฐ์ฌ(Auditing)
`npm audit`, `yarn audit` ๋๋ `pnpm audit`์ ์ฌ์ฉํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ฌํ์ธ์. ์ด๋ฌํ ๋ช ๋ น์ด๋ ํ๋ก์ ํธ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์ค์บํ๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
ํ๋ก๋์ ์ ์ํ ๋ชจ๋ ๋ฒ๋ค๋ง
๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๋จ์ผ ํ์ผ(๋๋ ์์์ ํ์ผ)๋ก ๋ฒ๋ค๋งํ๋ ๊ฒ์ด ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค. Webpack, Parcel, Rollup๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋๊ณผ ๊ทธ ์์กด์ฑ์ ๊ฐ์ ธ์ ๋ธ๋ผ์ฐ์ ์์ ํจ์จ์ ์ผ๋ก ๋ก๋ํ ์ ์๋ ์ต์ ํ๋ ๋ฒ๋ค๋ก ๊ฒฐํฉํฉ๋๋ค.
1. Webpack
Webpack์ ๊ฐ๋ ฅํ๊ณ ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ์ฝ๋ ๋ถํ , ์ง์ฐ ๋ก๋ฉ, ํซ ๋ชจ๋ ๊ต์ฒด(HMR) ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. Webpack์ ๊ตฌ์ฑ์ด ๋ณต์กํ ์ ์์ง๋ง, ๋ฒ๋ค๋ง ํ๋ก์ธ์ค์ ๋ํ ๋์ ์์ค์ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
2. Parcel
Parcel์ ๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ ๋ก ๊ตฌ์ฑ(zero-configuration) ๋ฒ๋ค๋ฌ์ ๋๋ค. ์์กด์ฑ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. Parcel์ ๊ฐ๋จํ ํ๋ก์ ํธ๋ Webpack์ ๋ณต์ก์ฑ์ ํผํ๊ณ ์ถ์ ๊ฐ๋ฐ์์๊ฒ ์ข์ ์ ํ์ ๋๋ค.
3. Rollup
Rollup์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ํ ์ต์ ํ๋ ๋ฒ๋ค์ ๋ง๋๋ ๋ฐ ํนํ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ๋ฒ๋ค์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ธ ํธ๋ฆฌ ์์ดํน(tree shaking)์ ๋ฐ์ด๋ฉ๋๋ค. Rollup์ ๋ฐฐํฌ์ฉ์ผ๋ก ์๊ณ ํจ์จ์ ์ธ ๋ฒ๋ค์ ๋ง๋๋ ๋ฐ ์ข์ ์ ํ์ ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์ํ๊ณ๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ๊ฐ๋ ฅํ ๋ฆฌ์์ค์ ๋๋ค. ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ๋ฐ๊ฒฌ, ๊ด๋ฆฌ ๋ฐ ๋ฒ๋ค๋งํ๋ ๋ฐฉ๋ฒ์ ์ดํดํจ์ผ๋ก์จ ์์ฐ์ฑ๊ณผ ์ฝ๋ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํจํค์ง๋ฅผ ์ ์คํ๊ฒ ์ ํํ๊ณ , ์์กด์ฑ์ ์ฑ ์๊ฐ ์๊ฒ ๊ด๋ฆฌํ๋ฉฐ, ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ์ฉ ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์ ์ต์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๊ตฌ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ ๊ฒ์ ๋๋ค.